package com.gm.wj.controller;

import com.gm.wj.entity.SysBanner;
import com.gm.wj.result.Result;
import com.gm.wj.result.ResultFactory;
import com.gm.wj.service.SysBannerService;
import com.gm.wj.util.SysLoging;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;

/**
 * @description: 广告管理控制层
 * @author: Huang_shengjun
 * @create: 2020-08-21 00:59
 **/
@Log4j2
@RestController
@Api(tags = "广告管理相关接口")
public class SysBannerController {

    @Autowired
    SysBannerService sysBannerService;

    // 添加/修改
    @PostMapping("api/admin/content/banner")
    @SysLoging("添加广告信息") //根据SysLoging的注解信息，进行方法的注释
    @ApiOperation("添加广告信息的接口")
    public Result saveBanner(@RequestBody @Valid SysBanner sysBanner, BindingResult bindingResult) {
        if (bindingResult.hasErrors()) {
            log.info(bindingResult.hasErrors());
            log.info(bindingResult.getAllErrors());
            return ResultFactory.buildFailResult(bindingResult.getAllErrors().get(0).getDefaultMessage());
        }
        try{
            sysBannerService.addOrUpdate(sysBanner);
            return ResultFactory.buildSuccessResult("保存成功",null);
        } catch (Exception e){
            e.printStackTrace(); // 在控制台打印出异常种类，错误信息和出错位置等
            return ResultFactory.buildFailResult("服务器出错了，请联系管理员。错误信息：" + e.getMessage());
        }

    }

    // 列表
    @PostMapping("/api/banner/{size}/{page}")
    @ApiOperation("查询广告列表信息的接口")
    @SysLoging("查询广告列表信息") //根据SysLoging的注解信息，进行方法的注释
    public Result listBanner(@PathVariable("size") int size, @PathVariable("page") int page) {
        try{
            return ResultFactory.buildSuccessResult("查询成功",sysBannerService.list(page - 1, size));
        } catch (Exception e){
            e.printStackTrace(); // 在控制台打印出异常种类，错误信息和出错位置等
            return ResultFactory.buildFailResult("服务器出错了，请联系管理员。错误信息：" + e.getMessage());
        }

    }

    // 更新启用状态
    @PutMapping("/api/admin/banner/status")
    @ApiOperation("更新广告状态信息的接口")
    @SysLoging("更新广告状态信息") //根据SysLoging的注解信息，进行方法的注释
    public Result updateStatus(@RequestBody SysBanner sysBanner) {
        try {
            // System.out.println(sysBanner.toString());
            if (sysBanner.isDisplay() == true) {  // 当启用操作时，直接执行
                sysBannerService.updateBannerDisplay(sysBanner);
                return ResultFactory.buildSuccessResult("用户状态更新成功",null);
            }
            else if (sysBannerService.findByDisplay()) {  // 当禁用操作时，检查是否小于3个
                sysBannerService.updateBannerDisplay(sysBanner);
                return ResultFactory.buildSuccessResult("用户状态更新成功",null);
            } else {
                return ResultFactory.buildFailResult("广告页启用状态将少于 3 个，请检查后再操作");
            }
        }catch (Exception e){
            e.printStackTrace(); // 在控制台打印出异常种类，错误信息和出错位置等
            return ResultFactory.buildFailResult("服务器出错了，请联系管理员。错误信息：" + e.getMessage());
        }
    }

    // 根据id查询
    @GetMapping("/api/banner/{id}")
    @ApiOperation("根据id查询广告信息的接口")
    @SysLoging("根据id查询广告信息") //根据SysLoging的注解信息，进行方法的注释
    public Result getOneBanner(@PathVariable("id") int id) {
        try{
            return ResultFactory.buildSuccessResult("查询成功",sysBannerService.findById(id));
        }catch (Exception e){
            e.printStackTrace(); // 在控制台打印出异常种类，错误信息和出错位置等
            return ResultFactory.buildFailResult("服务器出错了，请联系管理员。错误信息：" + e.getMessage());
        }
    }

    // 删除
    @DeleteMapping("/api/admin/content/banner/{id}")
    @ApiOperation("删除广告信息的接口")
    @SysLoging("删除广告信息")
    public Result deleteBanner(@PathVariable("id") int id) {
        try{
            sysBannerService.delete(id);
            return ResultFactory.buildSuccessResult("删除成功",null);
        }catch (Exception e){
            e.printStackTrace(); // 在控制台打印出异常种类，错误信息和出错位置等
            return ResultFactory.buildFailResult("服务器出错了，请联系管理员。错误信息：" + e.getMessage());
        }
    }

    // 根据条件查询用户列表
    @PostMapping("/api/admin/banner/findByQueryKey")
    @ApiOperation("根据条件查询用户列表的接口")
    @SysLoging("根据条件查询用户列表")
    public Result listByQueryKey(String queryKey1,String queryKey2, String queryKey3) {
        try{
            return ResultFactory.buildSuccessResult("查询成功",sysBannerService.listByQueryKey(queryKey1,queryKey2,queryKey3));
        }catch (Exception e){
            e.printStackTrace(); // 在控制台打印出异常种类，错误信息和出错位置等
            return ResultFactory.buildFailResult("服务器出错了，请联系管理员。错误信息：" + e.getMessage());
        }
    }

    // 首页banner广告-轮播图
    @ApiOperation("首页banner广告-轮播图信息的接口")
    @PostMapping("/api/banner/findBannerByDisplay")
    @SysLoging("加载首页banner广告-轮播图信息") //根据SysLoging的注解信息，进行方法的注释
    public Result findBannerByDisplay() {
            return ResultFactory.buildSuccessResult("查询成功",sysBannerService.findBannerByDisplay());
    }

}
